Skip to content

gdb 常用命令速查 ​

按功能分类整理的 GDB 常用命令速查表,覆盖断点、单步、栈帧、内存查看等日常调试动作,附两个附加进程的实战用法:不进交互界面批量打印线程栈,以及解决 attach 时的 ptrace 权限问题。GDB 接受无歧义的命令前缀,并内置了一批单字母别名(如 d 即 delete、h 即 help),表中「简写」列即常用别名。

命令速查表 ​

类别 命令 简写 说明
启动与退出 gdb [可执行文件] — 启动 GDB 并加载可执行文件
quit q 退出 GDB
运行控制 run [args] r 开始运行程序(可带参数)
start — 启动程序并停在 main 函数开头
continue c 继续运行直到下一个断点或结束
kill — 终止正在调试的程序
断点管理 break [位置] b 在指定位置设断点(函数名、行号、地址等)
例:b main、b file.c:10
break [位置] if [条件] — 设置条件断点
info breakpoints i b 查看所有断点
delete [编号] d 删除指定编号的断点(不带编号则删除所有)
disable [编号] — 禁用断点
enable [编号] — 启用断点
单步执行 step s 单步进入(会进入函数内部)
next n 单步跳过(不进入函数)
finish — 执行完当前函数并返回
until [位置] u 运行到指定行(常用于跳出循环)
查看信息 list [位置] l 显示源代码(默认当前行附近)
print [表达式] p 打印变量或表达式的值
display [表达式] — 每次停住时自动显示表达式的值
info locals — 显示当前作用域的局部变量
info args — 显示当前函数的参数
info registers i r 显示寄存器内容
栈帧操作 backtrace bt 显示调用栈(函数调用链)
frame [编号] f 切换到指定栈帧
up / down — 向调用者方向(帧号增大)/ 向被调用方向(帧号减小)移动一帧
内存与寄存器 x/[数量][格式][单位] 地址 — 查看内存内容
例:x/10wx 0x1234(10 个十六进制字)
set variable var = value — 修改变量的值
其他实用命令 help [命令] h 获取帮助
shell [命令] — 在 GDB 中执行 shell 命令
set args [参数] — 设置程序运行参数(等效于 run 时传参)
show args — 显示当前设置的程序参数

大多数命令支持 Tab 自动补全;commands [编号] 可为断点挂一组自动执行的命令;layout src 进入 TUI 模式,分屏显示源码和命令。

附加进程打印全部线程栈 ​

不进入交互界面,一次性抓取目标进程所有线程的调用栈(排查死锁、卡顿时常用):

bash
gdb -batch -ex "thread apply all bt" -p $PID

附加进程的 ptrace 权限问题 ​

Linux(Ubuntu 等发行版)默认开启 Yama 限制,GDB 附加非子进程时会报 ptrace: Operation not permitted。永久放开(降低了安全防护,仅建议在调试机上使用):

bash
# 编辑 sysctl 配置文件
sudo vim /etc/sysctl.d/10-ptrace.conf

# 修改为
kernel.yama.ptrace_scope = 0

# 应用配置
sudo sysctl -p /etc/sysctl.d/10-ptrace.conf

临时放开(重启失效):

bash
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope

要点 ​

  • 断点看 i b、删断点 d N、条件断点 break ... if cond,三个组合覆盖大部分断点需求
  • 排查崩溃先 bt 看调用栈,再 f N 切帧、info locals 看现场
  • 附加线上进程优先用 gdb -batch -ex "thread apply all bt" -p PID,一次输出全部线程栈,侵入最小
最近更新

基于 VitePress 构建